package com.yushu.common.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * 对mybatisplus的基本功能的扩展
 * 2020年4月28日11:10:15
 *
 * @param <M>
 * @param <T>
 */
public class YSBaseServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> {
    /**
     * FIXME 2020年4月28日16:36:18 这个地方的需要完善SQL导入的功能，主键key只支持字符串
     *
     * @param key
     * @param wrapper
     * @return
     */
    public String validateNameRepeatByKey(String key, String primaryKey, Wrapper<T> wrapper) {
        int count = this.selectCount(wrapper);
//        如果key存在，则是修改，否则是新增
        if (StringUtils.isNotBlank(key)) {
//            如果是更新，则数字可以大于1
            if (count < 1) {
                return "true";
            } else if (count > 1) {//说明存在多个
                return "false";
            } else if (count == 1) {
                List<T> entitys = baseMapper.selectList(wrapper);
                String checkExit = "true";
                if (CollectionUtils.isNotEmpty(entitys)) {
                    for (int i = 0; i < entitys.size(); i++) {
                        T t = entitys.get(i);
                        JSONObject jsonObject = (JSONObject) JSON.toJSON(t);
                        String id = jsonObject.getString("id");
//                        说明当前值象存在于不同的对象之中，也不能重复
                        if (!StringUtils.equals(id.trim(), key.trim())) {
                            checkExit = "false";
                        }
                    }
                }
                return checkExit;
            } else {
                return "true";
            }
        } else {
//            如果是新增，则数字可以大于0
            if (count > 0) {
                return "false";
            } else {
                return "true";
            }
        }
    }

}
